جزوه · فصل دهم · جلسه ۹۶ · اسکن کردن سیستم ← بازگشت به فهرست
📘 فصل دهم · جلسه ۹۶ اسکن کردن سیستم
📅 تاریخ: شنبه، ۷ شهریور ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
این جلسه یکی از مباحث کلیدی در امنیت سیستم است. اسکن پورت‌ها، شناسایی سرویس‌های فعال و غیرفعال‌سازی سرویس‌های غیرضروری در آزمون‌های LPIC و RHCSA بسیار پرتکرار است.
🛡️ قبل از شروع، یه مثال ساده:

فرض کن می‌خوای خونه‌ات رو در برابر دزدها ایمن کنی. اولین کاری که می‌کنی اینه که همهٔ درها و پنجره‌ها رو چک می‌کنی تا ببینی کدوم‌ها باز یا قفل هستن. بعدش اونایی که باز هستن رو می‌بندی. توی لینوکس، اسکن کردن سیستم دقیقاً همینه: باید پورت‌های باز، سرویس‌های فعال و برنامه‌های در حال اجرا رو بررسی کنی تا نقاط ضعف رو پیدا و برطرف کنی. این جلسه بهت یاد میده چطور با ابزارهایی مثل nmap، ss، netstat، lsof و fuser سیستم‌ت رو اسکن کنی!

▍ اولین گام مهم در امنیت

قبل از اینکه هکرها سیستم شما را پیدا کنند، خودتان سیستم را بررسی کنید. این کار شامل چند مرحله است:

🔑 نکته کلیدی: «قبل از هکر، خودت سیستم را اسکن کن». این اصل طلایی امنیت است. اگر نقاط ضعف را خودتان پیدا کنید، می‌توانید قبل از سوءاستفاده، آنها را برطرف کنید.

▍ ابزار اول: nmap (اسکنر پورت)

nmap (Network Mapper) یکی از قدرتمندترین ابزارهای اسکن شبکه و شناسایی سرویس‌ها است. با آن می‌توانید پورت‌های باز، سرویس‌های فعال و سیستم‌عامل میزبان را شناسایی کنید.

⚠️ توجه: استفاده از nmap روی شبکه‌هایی که مالکیت ندارید، ممکن است غیرقانونی باشد. همیشه از این ابزار فقط روی سیستم‌های خودتان استفاده کنید.

• گام اول: اسکن TCP روی لوکال‌هوست

┌──(ya3in㉿kali)-[~] └─$ nmap -sT 127.0.0.1 Starting Nmap 7.94 ( https://nmap.org ) at 2026-09-07 10:30 +0330 Nmap scan report for localhost (127.0.0.1) Host is up (0.000010s latency). Not shown: 997 closed tcp ports (conn-refused) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp open https Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

توضیح: -sT مخفف TCP Connect Scan است و پورت‌های TCP باز را روی 127.0.0.1 (لوکال‌هوست) بررسی می‌کند.

نکته: همیشه اسکن را از لوکال‌هوست (127.0.0.1) شروع کنید تا ببینید سیستم شما از داخل چه سرویس‌هایی ارائه می‌دهد.

• گام دوم: اسکن UDP

بسیاری از سرویس‌ها از پروتکل UDP استفاده می‌کنند (مثل DNS، DHCP، SNMP). این پورت‌ها معمولاً در اسکن‌های TCP دیده نمی‌شوند، پس حتماً باید UDP را هم بررسی کنید.

┌──(ya3in㉿kali)-[~] └─$ nmap -sU 127.0.0.1 Starting Nmap 7.94 ( https://nmap.org ) at 2026-09-07 10:32 +0330 Nmap scan report for localhost (127.0.0.1) Host is up (0.000010s latency). Not shown: 998 closed udp ports (port-unreach) PORT STATE SERVICE 68/udp open|filtered dhcp 5353/udp open|filtered zeroconf Nmap done: 1 IP address (1 host up) scanned in 2.05 seconds

توضیح: -sU مخفف UDP Scan است. اسکن UDP به دلیل ماهیت این پروتکل، معمولاً کندتر و کمتر دقیق است، اما برای شناسایی سرویس‌های UDP ضروری است.

• گام سوم: اسکن IPv6

با گسترش IPv6، بسیاری از سیستم‌ها سرویس‌های خود را روی این پروتکل نیز ارائه می‌دهند. حتماً آدرس IPv6 لوکال‌هوست (::1) را نیز اسکن کنید.

┌──(ya3in㉿kali)-[~] └─$ nmap -6 ::1 Starting Nmap 7.94 ( https://nmap.org ) at 2026-09-07 10:35 +0330 Nmap scan report for ::1 Host is up (0.000010s latency). Not shown: 997 closed tcp ports (conn-refused) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp open https Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

توضیح: با گزینهٔ -6 به nmap می‌گوییم که از IPv6 استفاده کند. ::1 معادل 127.0.0.1 در IPv6 است.

نکته امتحانی: بسیاری از مدیران سیستم فقط IPv4 را بررسی می‌کنند و IPv6 را فراموش می‌کنند. حتماً هر دو را اسکن کنید!

• اسکن از نمای شبکه (آدرس IP واقعی)

علاوه بر لوکال‌هوست، سیستم را از نمای شبکه نیز اسکن کنید. از آدرس IP واقعی خود (مثلاً 192.168.100.11) استفاده کنید تا ببینید چه سرویس‌هایی از بیرون در دسترس هستند.

┌──(ya3in㉿kali)-[~] └─$ nmap -sT 192.168.100.11 └─$ nmap -sU 192.168.100.11

توضیح: این کار به شما نشان می‌دهد که از دید سایر دستگاه‌های شبکه چه سرویس‌هایی روی سیستم شما باز است.

▍ ابزار دوم: ss و netstat (بررسی پورت‌های باز)

ss و netstat دو ابزار داخلی لینوکس برای نمایش پورت‌های باز و اتصالات شبکه هستند. ss جدیدتر و سریع‌تر است.

🔵 ss (Socket Statistics)

  • جایگزین مدرن netstat
  • سریع‌تر و کارآمدتر
  • نمایش اطلاعات دقیق سوکت‌ها

🟢 netstat (Network Statistics)

  • ابزار قدیمی و کلاسیک
  • هنوز در بسیاری از سیستم‌ها موجود است
  • اطلاعات کامل شبکه را نمایش می‌دهد

• استفاده از ss

┌──(ya3in㉿kali)-[~] └─$ ss -ltu Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:443 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*

توضیح:

• استفاده از netstat

┌──(ya3in㉿kali)-[~] └─$ netstat --tcp --listening Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:https 0.0.0.0:* LISTEN
نکته: ss -ltu سریع‌ترین و کامل‌ترین روش برای مشاهدهٔ پورت‌های باز در لینوکس مدرن است.

▍ ابزار سوم: lsof (بررسی برنامه‌های پشت پورت)

lsof (مخفف List Open Files) لیست فایل‌های باز را نشان می‌دهد. در لینوکس، همه چیز فایل است، از جمله سوکت‌های شبکه. با lsof می‌توانید ببینید کدام برنامه روی کدام پورت گوش می‌دهد.

• نمایش همهٔ پورت‌های در حال گوش‌دادن

┌──(ya3in㉿kali)-[~] └─$ lsof -iTCP -sTCP:LISTEN COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1234 root 3u IPv4 12345 0t0 TCP *:ssh (LISTEN) apache2 5678 www 4u IPv4 12346 0t0 TCP *:http (LISTEN) nginx 9012 www 5u IPv4 12347 0t0 TCP *:https (LISTEN)

توضیح: این دستور همهٔ سرویس‌های TCP که در حالت LISTEN هستند را با نام برنامه و PID نمایش می‌دهد.

• بررسی یک پورت خاص

┌──(ya3in㉿kali)-[~] └─$ lsof -i tcp:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1234 root 3u IPv4 12345 0t0 TCP *:ssh (LISTEN)

توضیح: با lsof -i tcp:22 می‌توانید ببینید کدام برنامه روی پورت ۲۲ (SSH) گوش می‌دهد.

نکته: lsof برای عیب‌یابی و امنیت بسیار مفید است. اگر یک پورت ناشناس باز است، با lsof می‌توانید برنامه‌ی پشت آن را پیدا کنید.

▍ ابزار چهارم: fuser (نمایش PID پورت)

fuser یک ابزار قدرتمند برای شناسایی فرآیندهایی است که از یک فایل، دایرکتوری یا پورت شبکه استفاده می‌کنند.

┌──(ya3in㉿kali)-[~] └─$ fuser -vn tcp 22 USER PID ACCESS COMMAND 22/tcp: root 1234 F.... sshd └─$ fuser -vn udp 68 USER PID ACCESS COMMAND 68/udp: root 2345 F.... dhclient

توضیح:

نکته: fuser برای پیدا کردن PID یک پورت و خاتمه دادن به آن بسیار مفید است: fuser -k 22/tcp

▍ غیرفعال کردن سرویس‌های غیرضروری

بعد از اینکه سرویس‌های فعال را شناسایی کردید، باید آنهایی که نیاز ندارید را غیرفعال کنید. این کار با systemctl انجام می‌شود.

┌──(ya3in㉿kali)-[~] └─$ sudo systemctl stop SERVICE-NAME # متوقف کردن سرویس (فعلاً) └─$ sudo systemctl disable SERVICE-NAME # غیرفعال کردن سرویس (پس از ریبوت هم شروع نشود) └─$ sudo systemctl mask SERVICE-NAME # قفل کردن سرویس (حتی سایر سرویس‌ها هم نتوانند آن را شروع کنند)
📝 مثال عملی:

فرض کنید اسکن نشان داده که سرویس apache2 روی پورت ۸۰ فعال است، اما شما از آن استفاده نمی‌کنید:

┌──(ya3in㉿kali)-[~] └─$ sudo systemctl stop apache2 └─$ sudo systemctl disable apache2 └─$ sudo systemctl status apache2 ○ apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; disabled) Active: inactive (dead)
⚠️ توجه: قبل از غیرفعال کردن هر سرویس، مطمئن شوید که به آن نیازی ندارید. غیرفعال کردن سرویس‌های ضروری می‌تواند سیستم را از کار بیندازد.

▍ خلاصهٔ دستورات اسکن

ابزار دستور کاربرد
nmap nmap -sT 127.0.0.1 اسکن TCP لوکال‌هوست
nmap nmap -sU 127.0.0.1 اسکن UDP لوکال‌هوست
nmap nmap -6 ::1 اسکن IPv6
ss ss -ltu نمایش پورت‌های TCP/UDP در حال گوش‌دادن
netstat netstat --tcp --listening نمایش پورت‌های TCP در حال گوش‌دادن
lsof lsof -iTCP -sTCP:LISTEN نمایش برنامه‌های پشت پورت‌های TCP
lsof lsof -i tcp:22 بررسی برنامه روی پورت ۲۲
fuser fuser -vn tcp 22 نمایش PID برنامه روی پورت ۲۲
systemctl systemctl stop/disable SERVICE متوقف و غیرفعال کردن سرویس
✅ جمع‌بندی نهایی:
  • قبل از هکر، خودت اسکن کن → اصل طلایی امنیت.
  • nmap → اسکن حرفه‌ای پورت‌ها (TCP، UDP، IPv6).
  • ss -ltu → مشاهدهٔ سریع پورت‌های باز.
  • lsof → پیدا کردن برنامهٔ پشت هر پورت.
  • fuser → پیدا کردن PID یک پورت.
  • systemctl stop/disable → غیرفعال کردن سرویس‌های غیرضروری.
  • همیشه هر دو پروتکل TCP و UDP و هر دو نسخهٔ IPv4 و IPv6 را بررسی کنید.
📝 تمرین پیشنهادی:

یک اسکریپت بنویسید که:

  • با nmap پورت‌های باز روی لوکال‌هوست را شناسایی کند.
  • با ss -ltu لیست پورت‌های باز را نمایش دهد.
  • با lsof برنامه‌های پشت هر پورت را پیدا کند.
  • یک گزارش از سرویس‌های فعال تهیه کند.